#ifndef HW_INTERFACE_H_
#define HW_INTERFACE_H_
#include <lua.hpp>

#define MAX_HW 0x10000

struct hw_device{
	unsigned int id;
	unsigned int man;
	short ver;
	bool init;
	char *def_file;
	lua_State *lua;
};


void sendInterrupt(hw_device *target);
void sendUpdate(hw_device *target);
void openLibHW(lua_State *lua);



int setA(lua_State *lua);
int setB(lua_State *lua);
int setC(lua_State *lua);
int setX(lua_State *lua);
int setY(lua_State *lua);
int setZ(lua_State *lua);
int setI(lua_State *lua);
int setJ(lua_State *lua);
int setRAM(lua_State *lua);
int readA(lua_State *lua);
int readB(lua_State *lua);
int readC(lua_State *lua);
int readX(lua_State *lua);
int readY(lua_State *lua);
int readZ(lua_State *lua);
int readI(lua_State *lua);
int readJ(lua_State *lua);
int readRAM(lua_State *lua);
int push(lua_State *lua);
int pop(lua_State *lua);
int peek(lua_State *lua);
//int pick(lua_State *lua);
int setSP(lua_State *lua);
int setPC(lua_State *lua);
int loadDevice(lua_State *lua);
int issueHWI(lua_State *lua);
int ptime(lua_State *lua); //Precision time

#endif